<template>
  <div id="vue_pdf_app">
    <VuePdfApp
      :page-scale="pageScale"
      :theme="theme"
      :style="`width: ${viewerWidth}; height: ${viewerHeight};`"
      :pdf="src"
      :file-name="fileName"
      v-bind="$attrs"
      @pages-rendered="pagesRendered"
      :config="config"
      @dblclick.prevent
    ></VuePdfApp>
  </div>
</template>

<script setup lang="ts">
import { computed, ref } from 'vue'
import VuePdfApp from 'vue3-pdf-app'
import 'vue3-pdf-app/dist/icons/main.css' // 引入样式
// 工具栏配置项
const config = ref({
  // 右侧其他区工具
  sidebar: {
    viewThumbnail: true, //启用缩略图视图
    viewOutline: true, //启用大纲视图
    viewAttachments: false, //启用附件视图
  },
  secondaryToolbar: {
    secondaryPresentationMode: true, //启用演示模式
    secondaryOpenFile: true, //启用打开文件功能
    secondaryPrint: true, //启用打印功能
    secondaryDownload: true, //启用下载功能
    secondaryViewBookmark: true, //启用书签视图
    firstPage: false, //启用跳转到第一页
    lastPage: false, //启用跳转到最后一页
    pageRotateCw: true, //启用顺时针旋转页面
    pageRotateCcw: true, //启用逆时针旋转页面
    cursorSelectTool: false, //启用选择工具
    cursorHandTool: false, //启用手形工具
    scrollVertical: false, //启用垂直滚动
    scrollHorizontal: false, //启用水平滚动
    scrollWrapped: false, //启用包裹滚动
    spreadNone: false, //启用无跨页模式
    spreadOdd: false, // 启用奇数页跨页模式
    spreadEven: false, //启用偶数页跨页模式
    documentProperties: false, //启用文档属性查看
  },
  // 配置左侧工具栏
  toolbar: {
    toolbarViewerLeft: {
      findbar: false, //启用查找条
      previous: true, // 启用上一页按钮
      next: true, //启用下一页按钮
      pageNumber: true, // 启用页码显示
    },
    //  配置右侧工具栏 css中已屏蔽
    toolbarViewerRight: {
      presentationMode: false, //启用演示模式
      openFile: false, //启用打开文件功能
      print: false, //启用打印功能
      download: false, // 启用下载功能
      viewBookmark: false, // 启用书签视图
    },
    // 配置中间工具栏
    toolbarViewerMiddle: {
      zoomOut: true, // 启用缩小功能
      zoomIn: true, //启用放大功能。
      scaleSelectContainer: false, //启用缩放选择容器功能
    },
  },
  errorWrapper: true, //启用错误包装，这可能用于显示错误信息或处理错误情况。
})
interface Props {
  src: string // pdf地址
  width?: string | number // 预览容器宽度
  height?: string | number // 预览容器高度
  pageScale?: number | string // 页面默认缩放规则，可选 'page-actual'|'page-width'|'page-height'|'page-fit'|'auto'
  theme?: string // 预览主题 可选 dark | light
  fileName?: string // 覆盖pdf文件名
}
const props = withDefaults(defineProps<Props>(), {
  src: '',
  width: '100%',
  height: '60vh',
  pageScale: 'page-width', // 默认自适应展示一页
  theme: 'light',
  fileName: '',
})
const viewerWidth = computed(() => {
  if (typeof props.width === 'number') {
    return props.width + 'px'
  } else {
    return props.width
  }
})
const viewerHeight = computed(() => {
  if (typeof props.height === 'number') {
    return props.height + 'px'
  } else {
    return props.height
  }
})
const emit = defineEmits(['loaded'])
// emitted when pdf document pages are rendered. Can be used to set default pages scale
function pagesRendered(pdfApp: any) {
  console.log('pagesRendered pdfApp:', pdfApp)
  emit('loaded', pdfApp)
}
</script>
<style lang="scss">
// .toolbar{
//   display: none;
// }
#toolbarViewer {
  // display: none;
  #sidebarToggle {
    &::before {
      font-size: 40px;
    }
  }
  .toolbarButton {
    &::before {
      font-size: 40px;
    }
  }
}
#secondaryToolbarToggle {
  display: none;
}
#toolbarSidebar {
  display: none;
}
#sidebarContent {
  top: 0 !important;
}
#thumbnailView {
  width: 100% !important;
}
#vue_pdf_app {
  width: 716px;
}

.pdf-app .pdfViewer .page{
  margin: 0 10px 10px !important;
}
</style>
